package class11;

import java.util.Stack;

/**
 * 好的尝试
 *
 * 给你一个栈, 请你逆序这个栈
 * 不能申请额外的数据结构
 * 只能使用递归函数
 *
 *
 *
 */
public class Code04_ReverseStackUsingRecursive {

	public static void reverse(Stack<Integer> stack) {
		if (stack.isEmpty()) {
			return;
		}
		int i = f(stack);
		reverse(stack);
		stack.push(i);
	}

	/**
	 *
	 * @param stack 给定一个栈
	 * @return 返回栈底的数
	 */
	public static int f(Stack<Integer> stack) {
		//弹出栈中数据
		int result = stack.pop();
		if (stack.isEmpty()) {
			return result;
		} else {
			int last = f(stack);
			//还原现场,将当前栈中记录的当前层数据压回去
			stack.push(result);
			return last;
		}
	}

	public static void main(String[] args) {
		Stack<Integer> test = new Stack<Integer>();
		test.push(1);
		test.push(2);
		test.push(3);
		test.push(4);
		test.push(5);
		reverse(test);
		while (!test.isEmpty()) {
			System.out.println(test.pop());
		}

	}

}
